define(["Zepto", 
        "underscore", 
        "Backbone", 
        "Handlebars",  
        "collections/orariocorsocollection",
        "collections/corsostudentecollection",
        "collections/studentevotacorsocollection",
        "models/utente",
        "models/session",
        "models/corsostudente",
        "views/course/schedulesview",
        "views/common/menuview",
        "views/course/iscrittiview",
        "views/common/menucourse/menuteacherview",
        "views/common/menucourse/menustudentview",
        "views/common/menucourse/menuaddlibrettoview",
        "text!templates/course/course.html"
], function($, _, Backbone, Handlebars, OrarioCorsoCollection, CorsoStudenteCollection, 
		StudenteVotaCorsoCollection, Utente, Session, Corsostudente, SchedulesView,
		MenuView, IscrittiView, MenuTeacherView, MenuStudentView, MenuAddLibrettoView,template) {
	
   
	  var CoursePage = Backbone.View.extend({
		  
	        template: Handlebars.compile(template),

	        render: function(eventName) {

	            this.ratingCollection = new StudenteVotaCorsoCollection();
				this.ratingCollection.fetch({
					query : {
						//id_corso : this.model.get('objectId')
						corso: {"__type":"Pointer","className":"corso","objectId":this.model.get('objectId')}
	                },
	               	success: function(data) {
	               		// alert('recuperati rating: ' + data.length);
	               		var n_ratings = data.length;
	               		var avg_interesse, avg_utilita, avg_facilita, avg_docente, avg_materiale;
	               		avg_interesse = avg_utilita = avg_facilita = avg_docente = avg_materiale = 0;

						while (data.length) {
							var curr_rating = data.pop();
							avg_interesse += curr_rating.get('interesse');
							avg_utilita += curr_rating.get('utilita');
							avg_facilita += curr_rating.get('facilita');
							avg_docente += curr_rating.get('docente');
							avg_materiale += curr_rating.get('materiale');
						}
						avg_interesse /= n_ratings;
						avg_utilita /= n_ratings;
						avg_facilita /= n_ratings;
						avg_docente /= n_ratings;
						avg_materiale /= n_ratings;

						// alert('avg_interesse: ' + Math.round(avg_interesse));
						// alert('avg_utilita: ' + Math.round(avg_utilita));
						// alert('avg_facilita: ' + Math.round(avg_facilita));
						// alert('avg_docente: ' + Math.round(avg_docente));
						// alert('avg_materiale: ' + Math.round(avg_materiale));
						$('#interessestar'+Math.round(avg_interesse)).attr('checked', true);
						$('#utilitastar'+Math.round(avg_utilita)).attr('checked', true);
						$('#facilitastar'+Math.round(avg_facilita)).attr('checked', true);
						$('#docentestar'+Math.round(avg_docente)).attr('checked', true);
						$('#materialestar'+Math.round(avg_materiale)).attr('checked', true);

					}
				});


	        	this.$el.html(this.template(this.model.toJSON()));
	        	
	        	// menu top
	        	this.menutop = new MenuView({
	               	el : $('#menu', this.el),
	    			model : this.model
				});
	            this.menutop.render();
	        	
	            this.orariCollection = new OrarioCorsoCollection();
				this.orariCollection.fetch({
					query : {
						//id_corso : this.model.get('objectId'),
						corso: {"__type":"Pointer","className":"corso","objectId":this.model.get('objectId')}
	                },
	                include : 'aula',          //Include un oggetto di tipo Puntatore
	               	success: function(data) {
	                	this.schedules = new SchedulesView({	    				
		                	el : $('#schedule ul', this.el),
							model : data
	    				});
		                this.schedules.render();
					}
				});


				this.iscrittiCollection = new CorsoStudenteCollection();
				this.iscrittiCollection.fetch({
					query : {
						//id_corso : this.model.get('objectId')
						corso: {"__type":"Pointer","className":"corso","objectId":this.model.get('objectId')}
	                },
	                include : 'utente',          //Include un oggetto di tipo Puntatore
	               	success: function(data) {
	               		$('#niscritti').html(data.length);
	                	this.iscritti = new IscrittiView({	    				
		                	el : $('#registered ul', this.el),
							model : data
	    				});
		                this.iscritti.render();
					}
				});
				
				
				// niente menu se il corso non è attivo, 
				// peraltro vengono rimosso "iscritti", "orario lezioni"
				if(this.model.get('isattivo')){
				
					// visualizza il menu appropriato
					// menu-teacher se l'utente è docente
					// menu-student se l'utente è studente
					if(Session.getAuth().isdocente){
						// Mostra il pulsante per terminare il corso solo se il docente è il titolare del corso
						if(this.model.get('docente').objectId == Session.getAuth().objectId) {
		        			this.menu = new MenuTeacherView({	    				
		                		el : $('#bottommenu', this.el),
								model : this.model
		        			});
		        			this.menu.render();
	        			}
	        		}else{
	        			this.menu = new MenuStudentView({	    				
	                		el : $('#bottommenu', this.el),
							model : this.model
    					});
    					this.menu.render();

    					var iscrittiCollection = new CorsoStudenteCollection();
						iscrittiCollection.fetch({
							query : {
								//id_corso : this.model.get('objectId')
								utente: {"__type":"Pointer","className":"_User","objectId":Session.getAuth().objectId},
								corso: {"__type":"Pointer","className":"corso","objectId":this.model.get('objectId')}
			                },
			               	success: function(data) {
			               		// Se l'utente corrente ha una registrazione per il corso in questione
			               		if(data.length >= 1)
			               			$('#bookmark span.icon').addClass('checked'); //Visualizza il pulsante checked
							}
						});
	        		}
	        		
	        		
				}else{
					//alert('isattivo ' + this.model.get('isattivo'));
					//alert('corso disattivato');
					//rimuovi "iscritti", "orario lezioni"
					//this.$el.remove('#iscritti');
					if(!Session.getAuth().isdocente){
						var that = this;
						user_id = Session.getAuth().objectId;
						this.idc = this.model.get('objectId');
						
						this.corsostudenteCollection = new CorsoStudenteCollection();
						// alert('id ' + this.model.get('objectId'));
						this.corsostudenteCollection.fetch({
							query : {
								// verifico se il corso non è già stato aggiunto nel libretto
								libretto: true,
								utente: {"__type":"Pointer","className":"_User","objectId":user_id} ,
								corso: {"__type":"Pointer","className":"corso","objectId":this.model.get('objectId')}
							},
							include:'corso',
							success: function(data){
								// Visualizza il pulsante per aggiungere il corso al libretto
								// solo se il corso non è già stato inserito nel libretto
								if(data.length < 1) {
									that.menu = new MenuAddLibrettoView({	    				
										el : $('#bottommenu', that.el),
										model : that.model
				        			});
									that.menu.render();
								}
								
							}
								
						});
						
					}
				}
	        	
				
	            return this;
	        },

	        postRender: function(eventName) {
	        	var syllabusscroll = new iScroll('syllabus',
                                  { useTransition:false,
                                    checkDOMChanges: true,
                                    hideScrollbar: true,
                                    fixedScrollbar:true });

				var booksscroll = new iScroll('books',
                                  { useTransition:false,
                                    checkDOMChanges: true,
                                    hideScrollbar: true,
                                    fixedScrollbar:true });
	        },

	        events: {
	        	
	        	'click #bookmark': 'bookmark',
	            'touchstart .button': 'over',
	            'touchend .button': 'left',
	            'touchcancel .button': 'left',
	            'touchstart button': 'over',
	            'touchend button': 'left',
	            'touchcancel button': 'left',
	            'touchstart .ac-container article.selectable ul li': 'over',
	            'touchend .ac-container article.selectable ul li': 'left',
	            'touchcancel .ac-container article.selectable ul li': 'left'
	        },
	        

 
	        bookmark:  function(event) {
	        	if(Session.getAuth()){
	        		  var course_id = this.model.get('objectId');
	        		  var user_id = Session.getAuth().objectId;
	        		  this.corsostudenteCollection = new CorsoStudenteCollection();
	        		  this.corsostudenteCollection.fetch({
	  					query : {
	  						corso: {"__type":"Pointer","className":"corso","objectId":course_id},
	  						utente: {"__type":"Pointer","className":"_User","objectId":user_id}
	  	               		},
	  	               		include:'corso',
	  	               	success: function(data) {
	  	               		if(data.length > 0){
	  	               			var id = data.models[0].get('objectId');
	               				var c = new Corsostudente({objectId: id});
	  	               			var notifica = data.models[0].get('notifica');
	  	               			if(notifica){
	  	               				c.save({
	  	               					notifica: false,
	  	               				},{
	  	               					success: function(){
	  	               						alert('Non sei più iscritto al corso');
	  	               						$('#bookmark span.icon').removeClass('checked');
	  	               					},
	  	               					error: function(){
	  	               						alert('Error');
	  	               					}
	  	               				});
	  	               			}else{
	  	               				c.save({
	  	               					notifica: true,
	  	               				},{
	  	               					success: function(){
	  	               						alert('Ti sei iscritto al corso');
	  	               						$('#bookmark span.icon').addClass('checked');
	  	               					},
	  	               					error: function(){
	  	               						alert('Error');
	  	               					}
	  	               				});
	  	               			}
	  	               		}else{
	  	               		 var cs = new Corsostudente();
	  	               		 cs.save({
	  	               			 corso: {"__type":"Pointer","className":"corso","objectId":course_id},
	  	               			 utente: {"__type":"Pointer","className":"_User","objectId":user_id},
	  	               			 terminato: false,
	  	               			 notifica: true,
	  	               			 votazione: 0,
	  	               			 libretto: false
	  	               		 },{
	  	               			 success: function(){
	  	               				 
	  	               				 alert('Ti sei iscritto al corso');
	  	               				 $('#bookmark span.icon').addClass('checked');
	  	               			 },
	  	               			 error: function(){
	  	               				 alert('Error');
	  	               			 }
	  	               		 });
	  	               		
	  	               		}
	  					}});
	        	}
	        },

	        over: function(event) {
	            $(event.currentTarget).addClass('fake-active');
	        },

	        left: function(event) {
	            $(event.currentTarget).removeClass('fake-active');
	        }

	});

    return CoursePage;

});

